#include "bsp_sht3x_arp.h"
#include "bsp_cpu_adc.h"


static stSht3xArpSettingPar Sht3xArpSettingPar;


/*******************************************************************************
 * 名    称： bsp_Sht3xArpInit
 * 功    能： SHT3XARp传感器初始化
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2021-01-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
void bsp_Sht3xArpInit(void)
{
    bsp_CpuAdcInit();

    /* 设置SHT3x-ARP读取时用到的参数 */
    Sht3xArpSettingPar.AdcMinVal = (uint16_t)(AdcRange_Value * 0.1);
    Sht3xArpSettingPar.AdcMaxVal = (uint16_t)(AdcRange_Value * 0.9);
}

/*******************************************************************************
 * 名    称： bsp_ReadSht3xArpTempAndHumi
 * 功    能： 通过ADC的值换算成温湿度的值
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2021-01-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
stSht3xArpValue bsp_ReadSht3xArpTempAndHumi(uint32_t t_TempAdc, uint32_t t_HumiAdc)
{
    stSht3xArpValue tSht3xArpVal;
//    /* 温湿度的电压是电源电压的10% ~ 90% 不在这个范围的都是异常 */
//    if(((adcAverageBuff[0] <= Sht3xArpSettingPar.AdcMinVal) || (adcAverageBuff[0] >= Sht3xArpSettingPar.AdcMaxVal))
//    || ((adcAverageBuff[1] <= Sht3xArpSettingPar.AdcMinVal) || (adcAverageBuff[1] >= Sht3xArpSettingPar.AdcMaxVal)))
//    {
//       tSht3xArpVal.iTemp = TEMPHUMI_ERROR_MASK;
//       tSht3xArpVal.iHumi = TEMPHUMI_ERROR_MASK;
//       tSht3xArpVal.fTemp = TEMPHUMI_ERROR_MASK;
//       tSht3xArpVal.fHumi = TEMPHUMI_ERROR_MASK;
//       return(tSht3xArpVal);
//   }

    /***********************************************
     * 描述： 计算SHT3X-ARP的温湿度（float类型）
     */
#if (TEMP_UNIT == TEMP_UNIT_C) /*此处值为0时温度为华氏温度/值为非0时，温度为摄氏度*/
    /*摄氏度℃*/
    tSht3xArpVal.fTemp = (-66.875) + (218.75 * ((float)(t_TempAdc) / AdcRange_Value));
    /***********************************************
     * 描述： 对计算SHT3X-ARP的温度进行限幅
     */
    if(tSht3xArpVal.fTemp <= -40)
    {
        tSht3xArpVal.fTemp = -40;
    }
    else if(tSht3xArpVal.fHumi >= 125)
    {
        tSht3xArpVal.fTemp = 125;
    }
#else
    /*华氏温度℉*/
    tSht3xArpVal.fTemp = (-88.375) + (393.75 * ((float)(t_TempAdc) / AdcRange_Value));

#endif
    /*湿度%RH*/
    tSht3xArpVal.fHumi = (-12.5) + (125 * ((float)(t_HumiAdc) / AdcRange_Value));

    /***********************************************
     * 描述： 对计算SHT3X-ARP的湿度进行限幅
     */
    if(tSht3xArpVal.fHumi <= 0)
    {
        tSht3xArpVal.fHumi = 0;
    }
    else if(tSht3xArpVal.fHumi >= 100)
    {
        tSht3xArpVal.fHumi = 100;
    }

    /***********************************************
     * 描述： 计算SHT3X-ARP的温湿度（int类型,放大10倍之后的值）
     */
    tSht3xArpVal.iTemp = (int16_t)(tSht3xArpVal.fTemp * 10);
    tSht3xArpVal.iHumi = (int16_t)(tSht3xArpVal.fHumi * 10);;

    return(tSht3xArpVal);
}

/*******************************************************************************
 * 名    称： bsp_Sht3xArpMeasure
 * 功    能： SHT3XARP传感器测量一次温湿度
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2021-01-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
int8_t bsp_Sht3xArpMeasure(stSht3xArpValue* pVal)
{
    /* 读取ADC的值 */
    bsp_CpuAdcGetAverageValue();

    /* 温湿度的电压是电源电压的10% ~ 90% 不在这个范围的都是异常 */
    if(((adcAverageBuff[0] <= Sht3xArpSettingPar.AdcMinVal) || (adcAverageBuff[0] >= Sht3xArpSettingPar.AdcMaxVal))
    || ((adcAverageBuff[1] <= Sht3xArpSettingPar.AdcMinVal) || (adcAverageBuff[1] >= Sht3xArpSettingPar.AdcMaxVal)))
    {
        pVal->iTemp = TEMP_ERROR_MASK;
        pVal->iHumi = HUMI_ERROR_MASK;
        pVal->fTemp = TEMP_ERROR_MASK;
        pVal->fHumi = HUMI_ERROR_MASK;
        return(-1);
    }

    *pVal = bsp_ReadSht3xArpTempAndHumi(adcAverageBuff[0], adcAverageBuff[1]);

    return 0;
}

/*******************************************************************************
 * 名    称： bsp_Sht3xArpStartMeasure
 * 功    能： 开始测量
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2021-01-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
void bsp_Sht3xArpStartMeasure(void)
{
    bsp_CpuAdcStart();
}

/*******************************************************************************
 * 名    称： bsp_Sht3xArpStopMeasure
 * 功    能： 停止测量
 * 入口参数： 无
 * 出口参数： 无
 * 作　　者： Roger-WY.
 * 创建日期： 2021-01-25
 * 修    改：
 * 修改日期：
 * 备    注：
 *******************************************************************************/
void bsp_Sht3xArpStopMeasure(void)
{
    bsp_CpuAdcStop();
}

